<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <title>（转载学习）slf4j和Logback相关的日志管理介绍 | HankChan&#39;s Blog</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块：logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或">
<meta property="og:type" content="article">
<meta property="og:title" content="（转载学习）slf4j和Logback相关的日志管理介绍">
<meta property="og:url" content="http://hexo.hankchan.cn/2016/07/15/ef-bc-88-e8-bd-ac-e8-bd-bd-e5-ad-a6-e4-b9-a0-ef-bc-89slf4j-e5-92-8clogback-e7-9b-b8-e5-85-b3-e7-9a-84-e6-97-a5-e5-bf-97-e7-ae-a1-e7-90-86-e4-bb-8b-e7-bb-8d/index.html">
<meta property="og:site_name" content="HankChan&#39;s Blog">
<meta property="og:description" content="Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块：logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或">
<meta property="og:updated_time" content="2017-05-26T02:13:23.615Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="（转载学习）slf4j和Logback相关的日志管理介绍">
<meta name="twitter:description" content="Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块：logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或">
  
    <link rel="alternate" href="/atom.xml" title="HankChan&#39;s Blog" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  <link rel="stylesheet" href="/css/style.css">
  

</head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/" id="logo">HankChan&#39;s Blog</a>
      </h1>
      
        <h2 id="subtitle-wrap">
          <a href="/" id="subtitle">生活就像海洋</a>
        </h2>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/">Home</a>
        
          <a class="main-nav-link" href="/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="搜索"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://hexo.hankchan.cn"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main"><article id="post-ef-bc-88-e8-bd-ac-e8-bd-bd-e5-ad-a6-e4-b9-a0-ef-bc-89slf4j-e5-92-8clogback-e7-9b-b8-e5-85-b3-e7-9a-84-e6-97-a5-e5-bf-97-e7-ae-a1-e7-90-86-e4-bb-8b-e7-bb-8d" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2016/07/15/ef-bc-88-e8-bd-ac-e8-bd-bd-e5-ad-a6-e4-b9-a0-ef-bc-89slf4j-e5-92-8clogback-e7-9b-b8-e5-85-b3-e7-9a-84-e6-97-a5-e5-bf-97-e7-ae-a1-e7-90-86-e4-bb-8b-e7-bb-8d/" class="article-date">
  <time datetime="2016-07-15T01:57:59.000Z" itemprop="datePublished">2016-07-15</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/日志管理/">日志管理</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      （转载学习）slf4j和Logback相关的日志管理介绍
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <div id="csdnEditor" class=" ltr"><br><div class="layout-wrapper-l1"><br><div class="layout-wrapper-l2"><br><div class="layout-wrapper-l3"><br><div class="preview-panel"><br><div class="preview-container"><br><div id="preview-contents"><br><div id="wmd-preview-section-18" class="wmd-preview-section preview-content"><br><br>Logback是由log4j创始人设计的又一个开源日志组件。<br>logback当前分成三个模块：logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。 Logback是要与SLF4J结合起来用两个组件的官方网站如下：<br>logback的官方网站：<a href="http://logback.qos.ch/" target="_blank" rel="external">http://logback.qos.ch</a><br>SLF4J的官方网站：<a href="http://www.slf4j.org/" target="_blank" rel="external">http://www.slf4j.org</a><br>本文章用到的组件如下：<br>logback-access-1.0.0.jar<br>logback-classic-1.0.0.jar<br>logback-core-1.0.0.jar<br>slf4j-api-1.6.0.jar<br>如果使用Maven,则依赖如下：<br><br></div><br><div id="wmd-preview-section-19" class="wmd-preview-section preview-content"><br><br>    <span class="hljs-tag">&lt;<span class="hljs-title">dependency</span>&gt;</span>                                        <span class="hljs-tag">&lt;<span class="hljs-title">groupId</span>&gt;</span>ch.qos.logback<span class="hljs-tag">&lt;/<span class="hljs-title">groupId</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-title">artifactId</span>&gt;</span>logback-classic<span class="hljs-tag">&lt;/<span class="hljs-title">artifactId</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-title">version</span>&gt;</span>1.1.6<span class="hljs-tag">&lt;/<span class="hljs-title">version</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-title">dependency</span>&gt;</span><code>&lt;/pre&gt;
    logback的优点：
    1、更快的实现 Logback的内核重写了，在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了，初始化内存加载也更小了。
    2、非常充分的测试 Logback经过了几年，数不清小时的测试。Logback的测试完全不同级别的。
    3、Logback-classic非常自然实现了SLF4j Logback-classic实现了 SLF4j。在使用SLF4j中，你都感觉不到logback-classic。而且因为logback-classic非常自然地实现了SLF4J， 所以切换到log4j或者其他日志框架非常容易，只需要提供成另一个jar包就OK，根本不需要去动那些通过SLF4JAPI实现的代码。
    4、非常充分的文档 官方网站有两百多页的文档。
    5、自动重新加载配置文件 当配置文件修改了，Logback-classic能自动重新加载配置文件。扫描过程快且安全，它并不需要另外创建一个扫描线程。这个技术充分保证了应用程序能在JEE环境里面跑得很欢。
    6、Lilith Lilith是log事件的观察者，和log4j的chainsaw类似。而lilith还能处理大数量的log数据 。
    7、谨慎的模式和非常友好的恢复 在谨慎模式下，多个FileAppender实例跑在多个JVM下，能够安全地写到同一个日志文件。RollingFileAppender会有些限制。Logback的FileAppender和它的子类包括RollingFileAppender能够非常友好地从I/O异常中恢复。
    8、配置文件可以处理不同的情况 开发人员经常需要判断不同的Logback配置文件在不同的环境下（开发，测试，生产）。而这些配置文件仅仅只有一些很小的不同，可以通过,和来实现，这样一个配置文件就可以适应多个环境。
    9、Filters（过滤器） 有些时候，需要诊断一个问题，需要打出日志。在log4j，只有降低日志级别，不过这样会打出大量的日志，会影响应用性能。在Logback，你可以继续保持那个日志级别而除掉某种特殊情况，如alice这个用户登录，她的日志将打在DEBUG级别而其他用户可以继续打在WARN级别。要实现这个功能只需加4行XML配置。可以参考MDCFIlter 。
    10、SiftingAppender（一个非常多功能的Appender） 它可以用来分割日志文件根据任何一个给定的运行参数。如，SiftingAppender能够区别日志事件跟进用户的Session，然后每个用户会有一个日志文件。
    11、自动压缩已经打出来的log RollingFileAppender在产生新文件的时候，会自动压缩已经打出来的日志文件。压缩是个异步过程，所以甚至对于大的日志文件，在压缩过程中应用不会受任何影响。
    12、堆栈树带有包版本 Logback在打出堆栈树日志时，会带上包的数据。
    13、自动去除旧的日志文件 通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性，你可以控制已经产生日志文件的最大数量。如果设置maxHistory 12，那那些log文件超过12个月的都会被自动移除。

    Logback的配置介绍
    1、Logger、appender及layout
    Logger作为日志的记录器，把它关联到应用的对应的context上后，主要用于存放日志对象，也可以定义日志类型、级别。
    Appender主要用于指定日志输出的目的地，目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、 Oracle和其他数据库、JMS和远程UNIX Syslog守护进程等。
    Layout 负责把事件转换成字符串，格式化的日志信息的输出。
    2、logger context
    各个logger 都被关联到一个 LoggerContext，LoggerContext负责制造logger，也负责以树结构排列各 logger。其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得。 getLogger方法以 logger 名称为参数。用同一名字调用LoggerFactory.getLogger 方法所得到的永远都是同一个logger对象的引用。
    3、有效级别及级别的继承
    Logger 可以被分配级别。级别包括：TRACE、DEBUG、INFO、WARN 和 ERROR，定义于 ch.qos.logback.classic.Level类。如果logger没有被分配级别，那么它将从有被分配级别的最近的祖先那里继承级别。root logger 默认级别是 DEBUG。
    4、打印方法与基本的选择规则
    打印方法决定记录请求的级别。例如，如果 L 是一个 logger 实例，那么，语句 L.info(“..”)是一条级别为 INFO 的记录语句。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用，否则，称为被禁用。记录请求级别为 p，其 logger的有效级别为 q，只有则当p&amp;gt;=q时，该请求才会被执行。
    该规则是 logback 的核心。级别排序为： TRACE &amp;lt; DEBUG &amp;lt; INFO &amp;lt; WARN &amp;lt; ERROR。

    Logback的默认配置
    如果配置文件 logback-test.xml 和 logback.xml 都不存在，那么 logback 默认地会调用BasicConfigurator ，创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender 组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n的 PatternLayoutEncoder 进行格式化。root logger 默认级别是 DEBUG。
    1、Logback的配置文件
    Logback 配置文件的语法非常灵活。正因为灵活，所以无法用 DTD 或 XML schema 进行定义。尽管如此，可以这样描述配置文件的基本结构：以开头，后面有零个或多个元素，有零个或多个元素，有最多一个元素。
    2、Logback默认配置的步骤
    (1). 尝试在 classpath 下查找文件 logback-test.xml；
    (2). 如果文件不存在，则查找文件 logback.xml；
    (3). 如果两个文件都不存在，logback 用 BasicConfigurator 自动对自己进行配置，这会导致记录输出到控制台。
    3、Logback.xml 文件

    &lt;/div&gt;
    &lt;div id=&quot;wmd-preview-section-20&quot; class=&quot;wmd-preview-section preview-content&quot;&gt;
    &lt;pre class=&quot;prettyprint&quot;&gt;</code><span class="hljs-pi">&lt;?xml version=”1.0” encoding=”UTF-8”?&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-title">configuration</span> <span class="hljs-attribute">debug</span>=<span class="hljs-value">“false”</span>&gt;</span><br>        <span class="hljs-comment">&lt;!–定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径–&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“LOG_HOME”</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">“/home”</span> /&gt;</span><br>        <span class="hljs-comment">&lt;!– 控制台输出 –&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">appender</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“STDOUT”</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">“ch.qos.logback.core.ConsoleAppender”</span>&gt;</span><br>            <span class="hljs-tag">&lt;<span class="hljs-title">encoder</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">“ch.qos.logback.classic.encoder.PatternLayoutEncoder”</span>&gt;</span><br>                 <span class="hljs-comment">&lt;!–格式化输出,%d:日期;%thread:线程名;%-5level：级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符–&gt;</span><br>                <span class="hljs-tag">&lt;<span class="hljs-title">pattern</span>&gt;</span>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n<span class="hljs-tag">&lt;/<span class="hljs-title">pattern</span>&gt;</span><br>            <span class="hljs-tag">&lt;/<span class="hljs-title">encoder</span>&gt;</span><br>        <span class="hljs-tag">&lt;/<span class="hljs-title">appender</span>&gt;</span><br>        <span class="hljs-comment">&lt;!– 按照每天生成日志文件 –&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">appender</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“FILE”</span>  <span class="hljs-attribute">class</span>=<span class="hljs-value">“ch.qos.logback.core.rolling.RollingFileAppender”</span>&gt;</span><br>            <span class="hljs-tag">&lt;<span class="hljs-title">rollingPolicy</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">“ch.qos.logback.core.rolling.TimeBasedRollingPolicy”</span>&gt;</span><br>                <span class="hljs-comment">&lt;!–日志文件输出的文件名–&gt;</span><br>                <span class="hljs-tag">&lt;<span class="hljs-title">FileNamePattern</span>&gt;</span>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log<span class="hljs-tag">&lt;/<span class="hljs-title">FileNamePattern</span>&gt;</span><br>                <span class="hljs-comment">&lt;!–日志文件保留天数–&gt;</span><br>                <span class="hljs-tag">&lt;<span class="hljs-title">MaxHistory</span>&gt;</span>30<span class="hljs-tag">&lt;/<span class="hljs-title">MaxHistory</span>&gt;</span><br>            <span class="hljs-tag">&lt;/<span class="hljs-title">rollingPolicy</span>&gt;</span><br>            <span class="hljs-tag">&lt;<span class="hljs-title">encoder</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">“ch.qos.logback.classic.encoder.PatternLayoutEncoder”</span>&gt;</span><br>                <span class="hljs-comment">&lt;!–格式化输出,%d:日期;%thread:线程名;%-5level：级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符–&gt;</span><br>                <span class="hljs-tag">&lt;<span class="hljs-title">pattern</span>&gt;</span>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n<span class="hljs-tag">&lt;/<span class="hljs-title">pattern</span>&gt;</span><br>            <span class="hljs-tag">&lt;/<span class="hljs-title">encoder</span>&gt;</span><br>            <span class="hljs-comment">&lt;!–日志文件最大的大小–&gt;</span><br>           <span class="hljs-tag">&lt;<span class="hljs-title">triggeringPolicy</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">“ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy”</span>&gt;</span><br>             <span class="hljs-tag">&lt;<span class="hljs-title">MaxFileSize</span>&gt;</span>10MB<span class="hljs-tag">&lt;/<span class="hljs-title">MaxFileSize</span>&gt;</span><br>           <span class="hljs-tag">&lt;/<span class="hljs-title">triggeringPolicy</span>&gt;</span><br>        <span class="hljs-tag">&lt;/<span class="hljs-title">appender</span>&gt;</span><br>       <span class="hljs-comment">&lt;!– show parameters for hibernate sql 专为 Hibernate 定制 –&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“org.hibernate.type.descriptor.sql.BasicBinder”</span>  <span class="hljs-attribute">level</span>=<span class="hljs-value">“TRACE”</span> /&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“org.hibernate.type.descriptor.sql.BasicExtractor”</span>  <span class="hljs-attribute">level</span>=<span class="hljs-value">“DEBUG”</span> /&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“org.hibernate.SQL”</span> <span class="hljs-attribute">level</span>=<span class="hljs-value">“DEBUG”</span> /&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“org.hibernate.engine.QueryParameters”</span> <span class="hljs-attribute">level</span>=<span class="hljs-value">“DEBUG”</span> /&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“org.hibernate.engine.query.HQLQueryPlan”</span> <span class="hljs-attribute">level</span>=<span class="hljs-value">“DEBUG”</span> /&gt;</span><br><br>        <span class="hljs-comment">&lt;!–myibatis log configure–&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“com.apache.ibatis”</span> <span class="hljs-attribute">level</span>=<span class="hljs-value">“TRACE”</span>/&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“java.sql.Connection”</span> <span class="hljs-attribute">level</span>=<span class="hljs-value">“DEBUG”</span>/&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“java.sql.Statement”</span> <span class="hljs-attribute">level</span>=<span class="hljs-value">“DEBUG”</span>/&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">logger</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“java.sql.PreparedStatement”</span> <span class="hljs-attribute">level</span>=<span class="hljs-value">“DEBUG”</span>/&gt;</span><br><br>        <span class="hljs-comment">&lt;!– 日志输出级别 –&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">root</span> <span class="hljs-attribute">level</span>=<span class="hljs-value">“INFO”</span>&gt;</span><br>            <span class="hljs-tag">&lt;<span class="hljs-title">appender-ref</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">“STDOUT”</span> /&gt;</span><br>            <span class="hljs-tag">&lt;<span class="hljs-title">appender-ref</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">“FILE”</span> /&gt;</span><br>        <span class="hljs-tag">&lt;/<span class="hljs-title">root</span>&gt;</span><br>         <span class="hljs-comment">&lt;!–日志异步到数据库 –&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-title">appender</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">“DB”</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">“ch.qos.logback.classic.db.DBAppender”</span>&gt;</span><br>            <span class="hljs-comment">&lt;!–日志异步到数据库 –&gt;</span><br>            <span class="hljs-tag">&lt;<span class="hljs-title">connectionSource</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">“ch.qos.logback.core.db.DriverManagerConnectionSource”</span>&gt;</span><br>               <span class="hljs-comment">&lt;!–连接池 –&gt;</span><br>               <span class="hljs-tag">&lt;<span class="hljs-title">dataSource</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">“com.mchange.v2.c3p0.ComboPooledDataSource”</span>&gt;</span><br>                  <span class="hljs-tag">&lt;<span class="hljs-title">driverClass</span>&gt;</span>com.mysql.jdbc.Driver<span class="hljs-tag">&lt;/<span class="hljs-title">driverClass</span>&gt;</span><br>                  <span class="hljs-tag">&lt;<span class="hljs-title">url</span>&gt;</span>jdbc:mysql://127.0.0.1:3306/databaseName<span class="hljs-tag">&lt;/<span class="hljs-title">url</span>&gt;</span><br>                  <span class="hljs-tag">&lt;<span class="hljs-title">user</span>&gt;</span>root<span class="hljs-tag">&lt;/<span class="hljs-title">user</span>&gt;</span><br>                  <span class="hljs-tag">&lt;<span class="hljs-title">password</span>&gt;</span>root<span class="hljs-tag">&lt;/<span class="hljs-title">password</span>&gt;</span><br>                <span class="hljs-tag">&lt;/<span class="hljs-title">dataSource</span>&gt;</span><br>            <span class="hljs-tag">&lt;/<span class="hljs-title">connectionSource</span>&gt;</span><br>      <span class="hljs-tag">&lt;/<span class="hljs-title">appender</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-title">configuration</span>&gt;</span><br><br></div><br><div id="wmd-preview-section-footnotes" class="preview-content"></div><br></div><br></div><br></div><br></div><br><div class="extension-preview-buttons animate closed"><br><div class="btn-group drag-me dropup" title="这里可以拖拽"></div><br><div class="btn-group dropup"></div><br><div class="btn-group dropup"></div><br><div class="btn-group dropup"><button class="btn btn-success dropdown-toggle stat-button" title="统计信息" data-toggle="dropdown"> <span class="value">5522</span></button></div><br></div><br></div><br></div><br></div>
      
    </div>
    <footer class="article-footer">
      <a data-url="http://hexo.hankchan.cn/2016/07/15/ef-bc-88-e8-bd-ac-e8-bd-bd-e5-ad-a6-e4-b9-a0-ef-bc-89slf4j-e5-92-8clogback-e7-9b-b8-e5-85-b3-e7-9a-84-e6-97-a5-e5-bf-97-e7-ae-a1-e7-90-86-e4-bb-8b-e7-bb-8d/" data-id="cj359k3z60016fwv7to23jpuz" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/2016/08/02/spring-e6-ba-90-e7-a0-81-e5-af-bc-e5-85-a5-e5-88-b0eclipse/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          Spring源码导入到Eclipse
        
      </div>
    </a>
  
  
    <a href="/2016/06/19/e9-83-a8-e5-88-86linux-e5-ad-a6-e4-b9-a0-e9-81-87-e5-88-b0-e7-9a-84-e9-97-ae-e9-a2-98-e5-8f-8a-e8-a7-a3-e5-86-b3-e6-96-b9-e6-b3-95-ef-bc-88-e6-9c-89-e7-a9-ba-e4-bc-9a-e6-9b-b4-e6-96-b0-e3-80-82/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">部分Linux学习遇到的问题及解决方法（有空会更新。。。。。的）</div>
    </a>
  
</nav>

  
</article>

</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">分类</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Docker/">Docker</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Eclipse/">Eclipse</a><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/Eclipse/Mybatis/">Mybatis</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Eclipse/Spring/">Spring</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Eclipse/分布式/">分布式</a></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/Git/">Git</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Linux/">Linux</a><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/Linux/Nginx/">Nginx</a></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/Mybatis/">Mybatis</a><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/Mybatis/Spring/">Spring</a><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/Mybatis/Spring/SpringMVC/">SpringMVC</a></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/Mybatis/SpringMVC/">SpringMVC</a></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/Nginx/">Nginx</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Spring/">Spring</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/SpringMVC/">SpringMVC</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/分布式/">分布式</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/日志管理/">日志管理</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/未分类/">未分类</a></li></ul>
    </div>
  </div>


  
    

  
    
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">归档</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2017/03/">三月 2017</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2017/01/">一月 2017</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/10/">十月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/09/">九月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/08/">八月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/07/">七月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/06/">六月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/05/">五月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/04/">四月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/03/">三月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/02/">二月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/01/">一月 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/12/">十二月 2015</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">最新文章</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/2017/03/13/docker-e5-be-ae-e6-9c-8d-e5-8a-a1-e5-ae-b9-e5-99-a8-e5-8c-96-e5-bc-80-e5-8f-91-e6-8e-a2-e7-b4-a2/">Docker-微服务容器化开发探索</a>
          </li>
        
          <li>
            <a href="/2017/01/20/drds-e7-bb-93-e5-90-88mybatis-e8-a7-a3-e5-86-b3-e6-96-b9-e6-a1-88-e4-b8-8e-e8-a7-84-e8-8c-83/">DRDS结合Mybatis解决方案与规范</a>
          </li>
        
          <li>
            <a href="/2017/01/03/springmvc-thymeleaf-e5-bc-80-e5-8f-91-e6-8c-87-e5-8d-97-demo/">SpringMVC-Thymeleaf-开发指南-Demo</a>
          </li>
        
          <li>
            <a href="/2016/10/16/nginx-e4-bb-a3-e7-90-86-e6-9c-8d-e5-8a-a1-e5-99-a8-e6-96-b9-e5-bc-8f-e8-a7-a3-e5-86-b3-e5-ae-9e-e9-99-85-e5-bc-80-e5-8f-91-e4-b8-adajax-e8-af-b7-e6-b1-82-e7-9a-84-e8-b7-a8-e5-9f-9f-e9-97-ae-e9-a2-98/">Nginx代理服务器方式解决实际开发中Ajax请求的跨域问题</a>
          </li>
        
          <li>
            <a href="/2016/10/11/e5-b7-a5-e5-8e-82-e6-a8-a1-e5-bc-8f-e5-92-8c-e5-8d-95-e4-be-8b-e6-a8-a1-e5-bc-8f-e7-bb-93-e5-90-88-e5-ba-94-e7-94-a8-e7-9a-84-e5-9c-ba-e6-99-af-e6-80-9d-e8-80-83/">工厂模式和单例模式结合应用的场景思考</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2017 Hank Chan<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/" class="mobile-nav-link">Home</a>
  
    <a href="/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>


  <link rel="stylesheet" href="/fancybox/jquery.fancybox.css">
  <script src="/fancybox/jquery.fancybox.pack.js"></script>


<script src="/js/script.js"></script>

  </div>
</body>
</html>